2140 IF ASC(CH$) >95 THEN CH$ = CHR$( ASC(CH$) -32)
2141 IF CH$ = "K" THEN GOSUB 8600: GOSUB 1700: GOTO 2135
2142 IF CH$ = "P" THEN GOSUB 1600:RC$(11 *(Q(26) >0)) = DZ$: GOSUB 1700: GOTO 2135
2143 IF CH$ = "S" THEN PRINT : GOSUB 2280: GOSUB 1700: GOTO 2135
2144 IF CH$ = "D" OR CH$ = "V" THEN GOSUB 1705: GOTO 2135
2145 IF LEFT$(CH$,1) <"0" OR LEFT$(CH$,1) >"9" THEN PRINT : GOTO 2135
2146 GET YN$: POKE -16368,0: PRINT YN$;: IF YN$ > = "0" AND YN$ < = "9" THEN CH$ = CH$ +YN$: GOTO 2146
2147 IF YN$ = CHR$(13) THEN 2154
2148 IF YN$ < > CHR$(8) THEN 2146
2149 IF LEN(CH$) >1 THEN CH$ = LEFT$(CH$, LEN(CH$) -1): GOTO 2146
2150 CH$ = "": GOTO 2138
2154 IF CH$ = "" THEN RETURN
2155 CH = VAL(CH$): IF CH <0 OR CH >9 +Q(44) +4 *MG +CN +NT THEN 2135
2156 FC = 0: GOSUB 2160: IF FC AND CH >0 AND NOT OP(11) THEN GOSUB 1705
2157 IF FC AND CH = 0 THEN GOSUB 1700
2158 GOTO 2135
2160 IF OP(13) <1 THEN OP(13) = -1
2162 IF CH = 0 THEN W = Y: POKE 34,0: GOSUB 420:X = Y: GOSUB 10070:FC = 1: GOSUB 850: GOTO 2247
2165 IF CH <5 THEN GOSUB 2340: GOTO 2240
2167 IF CH >4 AND CH < = 4 +Q(44) THEN GOSUB 3600: GOTO 2240
2170 IF CH = 5 +Q(44) OR CH = 6 +Q(44) THEN GOSUB 3080: GOTO 2240
2180 IF CH = 7 +Q(44) THEN IP = 8: GOSUB 2820: GOTO 2240
2190 IF CH < = 4 *MG +7 +Q(44) THEN GOSUB 2420: GOTO 2240
2200 IF CH = 4 *MG +8 +Q(44) THEN IP = 9: GOSUB 2820: GOTO 2240
2210 IF CH < = CN +4 *MG +8 +Q(44) THEN GOSUB 3160: GOTO 2240
2220 IF CH = 4 *MG +CN +9 +Q(44) THEN IP = 10: GOSUB 2820: GOTO 2240
2230 IF CH < = NT +CN +4 *MG +9 +Q(44) THEN GOSUB 2860
2240 GOSUB 8440: IF A >Q(16) THEN INVERSE : PRINT "THAT ENTRY MAKES THE RECORD EXCEED ITS";: GOSUB 860: PRINT "LENGTH BY "A -Q(16)" CHARACTERS. SHORTEN SOME": PRINT "FIELDS.": NORMAL
2245 IF OP(1) THEN PRINT TAB( 8)"("A" OF "Q(16)" CHAR. USED IN RECORD)"
2247 IF OP(13) <0 THEN OP(13) = 0
2250 RETURN
2280 CH = OP(8) -1:CZ = 0: IF CH < -1 THEN RETURN
2285 CH = CH +1: IF CH >9 +4 *MG +CN +NT +Q(44) THEN RETURN
2290 GOSUB 2160: IF CZ THEN RETURN
2295 GOTO 2285
2340 PRINT CH") "VR$(CH);:A$ = RC$(CH):IX = 3 + LEN(VR$(CH)):X7 = 0: GOSUB 2700: GOSUB 300: IF A$ = "" OR CZ THEN RETURN
2341 IF A$ = CHR$(5) THEN A$ = "": GOTO 2360
2342 IF CH < >3 THEN 2350
2343 B$ = "": FOR I = 1 TO LEN(A$):D$ = MID$ (A$,I,1): IF ASC(D$) >95 THEN D$ = CHR$( ASC(D$) -32)
2344 B$ = B$ +D$: NEXT : IF LEFT$(B$,1) < >"L" THEN 2350
2346 IF LEFT$("LIVING", LEN(B$)) = B$ THEN RC$(CH) = "L": RETURN
2347 LB = 0: FOR I = LEN(A$) TO 1 STEP -1: IF MID$ (A$,I,1) = Q$(4) THEN LB = I:I = 1
2348 NEXT : IF LB >1 THEN RC$(CH) = "L" + RIGHT$(A$, LEN(A$) -LB +1): RETURN
2350 IF CH = 1 OR CH = 3 THEN GOSUB 4200
2355 IF CH = 4 AND OP(5) THEN IF LEFT$(RC$(3),1) = "L" THEN S$(0,0) = A$
2360 RC$(CH) = A$: RETURN
2420 IP = CH -4 * INT((CH -1)/4) +9 -Q(44):IP = IP -4 * INT((IP -1)/4):IQ = INT((CH -4 -Q(44))/4): IF IP >1 THEN 2440
2430 X7 = 1:A$ = MI$(1,IQ): GOSUB 5500: GOSUB 410: PRINT CH") "WR$(1)IQ;:IX = 4 + LEN(WR$(1)): GOSUB 2700: GOSUB 3300: IF A$ = "" OR CZ THEN RETURN
2432 IF A$ = CHR$(5) THEN A$ = ""
2435 MI$(1,IQ) = A$: GOSUB 3040: RETURN
2440 PRINT CH") "WR$(IP)" (MRG.#"IQ")";:IX = 14 + LEN(WR$(IP)):X7 = 0:A$ = MI$(IP,IQ): GOSUB 2700: GOSUB 300: IF A$ = "" OR CZ THEN RETURN
2445 IF A$ = CHR$(5) THEN A$ = ""
2447 MI$(IP,IQ) = A$: IF IP = 2 THEN GOSUB 4200:MI$(IP,IQ) = A$
2450 IF IP <4 OR A$ = "" THEN 2460
2451 B$ = LEFT$(A$,1): IF ASC(B$) >95 THEN B$ = CHR$( ASC(B$) -32)
2452 IF B$ = "M" OR B$ = "D" OR B$ = "E" OR B$ = "W" THEN MI$(IP,IQ) = B$
2454 LB = 0: FOR I = LEN(A$) TO 1 STEP -1: IF MID$ (A$,I,1) = Q$(4) THEN LB = I:I = 1
2456 NEXT : IF LB >0 THEN MI$(IP,IQ) = B$ + RIGHT$(A$, LEN(A$) -LB +1)
2460 IF A$ < >"" THEN GOSUB 3000
2470 RETURN
2500 BB = 2: RETURN
2600 AA = -1: FOR I = 0 TO Q(37) -1: IF PA(I) <W AND W < = CT(I) THEN AA = I:I = Q(37)
2610 NEXT :BB = Q(28): IF AA > -1 THEN RETURN
2620 FOR I = 0 TO Q(37) -1: IF BB >SC(I) THEN BB = SC(I):AA = I
2630 NEXT : GOSUB 10470: IF X1 THEN BB = 0: RETURN
2640 GOSUB 2500: IF C2 = 2 THEN RETURN
2645 IF FS < >BB THEN GOSUB 8650
2650 ONERR GOTO 16720
2660 IF FS = 0 THEN GOSUB 2896:ZN$ = PF$ +"NAMELIST." + STR$(WH(BB,4)): PRINT CHR$(4)"OPEN"ZN$",S"WH(BB,2)",D"WH(BB,3)",L"Q(36) *Q(14) +Q(38):FS = BB
2662 R = INT((W -WH(BB,0) -1)/Q(36)) +1: PRINT CHR$(4)"READ"ZN$",R"R
2665 PA(AA) = Q(36) *(R -1): INPUT R: INPUT R:II = 1:I = Q(36) *AA +1: CALL LI:NA$(I) = MID$ (T$,1): IF NA$(I) < >"" THEN IF ASC(NA$(I)) = 34 THEN II = 2:NA$(I) = MID$ (NA$(I),2)
2670 FOR I = I +1 TO Q(36) *(AA +1): CALL LI:NA$(I) = MID$ (T$,II): NEXT : PRINT CHR$(4):SC(AA) = 0:PA(AA) = PA(AA) +WH(BB,0):CT(AA) = PA(AA) +Q(36): POKE 216,0: RETURN
2700 IF OP(13) <1 THEN RETURN
2705 X5 = 0: PRINT " [NOW ";: IF A$ = "" THEN A$ = "-EMPTY-"
2707 IF IX +7 >Q(22) THEN GOSUB 3800
2710 IX = IX +7: IF IX + LEN(A$) +2 >Q(22) OR (X7 >0 AND LA >0) THEN PRINT : PRINT SPC( 4);:IX = 8
2712 PRINT CHR$(34);: IF X7 THEN GOSUB 5600: PRINT CHR$(34);: GOTO 2720
2715 GOSUB 5900: PRINT CHR$(34);
2720 PRINT "]";: RETURN
2820 PRINT CH") "VR$(IP);:A$ = RC$(IP):IX = 4 + LEN(VR$(IP)):X7 = 0: GOSUB 2700: GOSUB 300: IF A$ = "" OR CZ THEN RETURN
2825 IF A$ = CHR$(5) THEN A$ = ""
2832 GOSUB 5700: ON IP -7 GOTO 2834,2836,2838
2834 IF A >Q(19) THEN 2820
2835 MG = A: GOTO 2840
2836 IF A >Q(18) THEN 2820
2837 CN = A: GOTO 2840
2838 IF A >Q(17) THEN 2820
2839 NT = A
2840 FC = 1:RC$(IP) = A$: RETURN
2860 IP = CH -CN -4 *MG -9 -Q(44): PRINT CH") NOTE "IP;:A$ = EX$(IP):IX = 8 + LEN( STR$(CH)) + LEN( STR$(IP)):X7 = 0: GOSUB 2700: GOSUB 300: IF A$ = "" OR CZ THEN RETURN
2865 IF A$ = CHR$(5) THEN A$ = ""
2870 EX$(IP) = A$: IF LEN(A$) >Q(27) THEN PRINT "THAT NOTE IS A BIT LONG. REENTER? ";: GOSUB 690: IF YN$ = "Y" THEN 2860
2880 RETURN
2896 IF PF$ < >WH$(BB) THEN PF$ = WH$(BB): PRINT CHR$(4)"PREFIX"PF$",S"WH(BB,2)",D"WH(BB,3)
2897 RETURN
2900 OG = 1: IF MI$(1,IQ) < >"" THEN LA = 1: GOSUB 3060
2915 IF MI$(4,IQ) = "" AND OP(2) THEN MI$(4,IQ) = "M"
2920 RETURN
3000 GOSUB 2900: IF MI$(IP,IQ) < >"" THEN LA = IP: GOSUB 3060
3030 RETURN
3040 IF A = 0 OR NOT OP(2) THEN RETURN
3045 W = A: GOSUB 420: PRINT "WHICH MARRIAGE IS THIS FOR"
3047 IX = 0: GOSUB 645: INPUT "?";YN$: IF YN$ = "" THEN RETURN
3050 IF VAL(YN$) <1 OR VAL(YN$) >Q(19) THEN 3045
3055 GOSUB 2900:S$(0,IQ) = YN$: RETURN
3060 LB = 0: FOR I = LEN(MI$(LA,IQ)) TO 1 STEP -1: IF MID$ (MI$(LA,IQ),I,1) = Q$(4) THEN LB = I:I = 1
3065 NEXT : IF LB >1 THEN S$(LA,IQ) = LEFT$(MI$(LA,IQ),LB -1)
3070 IF LB = 0 THEN S$(LA,IQ) = MI$(LA,IQ)
3075 RETURN
3080 IX = 4 + LEN(VR$(X6)):X6 = 12 -CH +Q(44):X7 = 1:A$ = RC$(X6): GOSUB 5500: GOSUB 410: PRINT CH") "VR$(X6);: GOSUB 2700: GOSUB 3300: IF A$ = "" OR CZ THEN RETURN
3087 IF A$ = CHR$(5) THEN A$ = ""
3090 RC$(X6) = A$: IF A >0 THEN OB = OB +1:T(OB) = A
3100 RETURN
3160 IP = CH -4 *MG -8 -Q(44):X7 = 1:A$ = C$(IP): GOSUB 5500: GOSUB 410: PRINT CH") CHILD #"IP;:IX = 10 + LEN( STR$(CH)) + LEN( STR$(IP)): GOSUB 2700: GOSUB 3300: IF A$ = "" OR CZ THEN RETURN
3170 IF A$ = CHR$(5) THEN A$ = ""
3175 C$(IP) = A$: IF OD > = Q(18) THEN 3200
3180 IF NOT OP(10) THEN IF A >0 THEN OD = OD +1:OD(OD) = A
3190 IF OP(10) THEN IF A$ < >"" THEN OD = OD +1:OD(OD) = A: GOSUB 5700:EM$(OD) = A$
3200 RETURN
3300 A = 0: GOSUB 300: IF A$ = "" OR A$ = " " OR A$ = CHR$(5) OR CZ THEN RETURN
3305 GOSUB 5500: IF LC OR LB = 1 THEN RETURN
3310 U = LA: GOSUB 500: IF NOT U THEN CZ = 1: RETURN
3360 A = LA: RETURN
3400 IF OD = 0 THEN 3500
3405 IF CN = 0 THEN OD = 0: GOTO 3500
3410 FOR X3 = 1 TO OD:X6 = 1: FOR X8 = 1 TO CN:A$ = C$(X8): GOSUB 5700: IF NOT OP(10) THEN IF A >0 THEN IF A = OD(X3) THEN X8 = CN:X6 = 0
3415 IF OP(10) THEN IF A$ < >"" THEN IF A$ = EM$(X3) THEN X8 = CN:X6 = 0
3420 NEXT : IF X6 THEN OD(X3) = 0:EM$(X3) = ""
3430 NEXT
3500 IF OB = 0 THEN RETURN
3510 FOR X3 = 1 TO OB:X6 = 1: FOR X8 = 6 TO 7:A$ = RC$(X8): GOSUB 5700: IF A = T(X3) THEN X6 = 0
3520 NEXT : IF X6 THEN T(X3) = 0
3530 NEXT : RETURN
3600 IP = CH +7:X7 = 0:A$ = RC$(IP): IF DF(IP) = 2 THEN GOSUB 5500: GOSUB 410:X7 = 1
3610 PRINT CH") "Q$(IP);:IX = 3 + LEN(Q$(IP)): GOSUB 2700: IF DF(IP) = 2 THEN GOSUB 3300: GOTO 3630
3620 GOSUB 300
3630 IF A$ = "" OR CZ THEN RETURN
3640 IF A$ = CHR$(5) THEN A$ = ""
3650 IF DF(IP) = 1 THEN GOSUB 4200
3655 IF G(9) < >IP OR A$ = "" THEN 3670
3660 GOSUB 5700:E$ = LEFT$(A$,1): IF ASC(E$) >96 AND ASC(E$) <123 THEN E$ = CHR$( ASC(E$) -32)
3662 IF LB >1 THEN A$ = E$ + RIGHT$(A$, LEN(A$) -LB +1): GOTO 3670
3665 A$ = E$
3670 RC$(IP) = A$: RETURN
3800 R = Q(2) -3:X5 = X5 +1: IF INT(X5/R) *R < >X5 THEN RETURN
3810 PRINT "PRESS ANY KEY TO CONTINUE";: GOSUB 690: IF YN$ = CZ$ THEN XZ = Q(28)
3815 IF Q(43) AND NOT Q(41) THEN RETURN
3820 A = (YN$ < > CHR$(13) AND (X5 >R +1 OR Q(41) >1)): VTAB R +1 +A: FOR I = 1 TO 26: PRINT " ";: NEXT : HTAB 1: VTAB R +A: PRINT : RETURN
4200 LT$ = "": IF LEN(A$) <4 THEN 4215
4202 Z = LEN(A$):Z1 = 0: FOR I = Z TO 1 STEP -1: IF MID$ (A$,I,1) = Q$(4) THEN Z1 = I:I = 1
4205 NEXT : IF Z1 >1 THEN LT$ = RIGHT$(A$,Z -Z1 +1):A$ = LEFT$(A$,Z1 -1)
4210 IF Z1 = 1 THEN LT$ = A$:A$ = ""
4215 Z1 = 0:Z2 = 0:BB$ = " "
4216 AA$ = A$:Z = 0: GOSUB 7840: IF Z = 0 THEN 4250
4218 IF Z +1 > LEN(A$) OR Z = 1 THEN 4250
4220 Z1 = Z:AA$ = RIGHT$(A$, LEN(A$) -Z):Z = 0: GOSUB 7840: IF Z = 0 THEN 4250
4230 IF Z +1 > LEN(A$) THEN 4250
4240 Z2 = Z +Z1: IF LEN(A$) = Z2 THEN 4410
4245 AA$ = RIGHT$(A$, LEN(A$) -Z2):Z = 0: GOSUB 7840: IF Z < >0 THEN 4410
4250 IF Z1 >0 AND Z2 >0 THEN 4300
4260 IF BB$ = " " THEN BB$ = "/": GOTO 4216
4265 IF BB$ = "/" THEN BB$ = "-": GOTO 4216
4270 GOTO 4410
4300 IF Z1 = Z2 -1 THEN 4410
4310 FL = 1:V1$ = LEFT$(A$,Z1 -1):V2$ = MID$ (A$,Z1 +1,Z2 -Z1 -1):V3$ = RIGHT$(A$, LEN(A$) -Z2): IF BB$ < >"/" AND BB$ < >"-" THEN 4320
4315 IF Q(25) THEN YN$ = V1$:V1$ = V2$:V2$ = YN$
4317 GOSUB 4500: GOTO 4400
4320 AA$ = LEFT$(V1$,1): IF (AA$ > = "A" AND AA$ < = "Z") OR (AA$ > = "a" AND AA$ < = "z") THEN GOSUB 4700: GOTO 4400
4330 GOSUB 4600
4400 IF NOT FL THEN 4410
4402 IF V1$ < >"??" THEN IF VAL(V1$) <1 OR VAL(V1$) >12 THEN PRINT "THE MONTH IS OUT OF VALID RANGE."
4403 IF V2$ < >"??" THEN IF VAL(V2$) <1 OR VAL(V2$) >31 THEN PRINT "THE DAY IS OUT OF VALID RANGE."
4405 IF Q(25) THEN YN$ = V1$:V1$ = V2$:V2$ = YN$
4409 A$ = V1$ +V2$ +V3$
4410 A$ = A$ +LT$: RETURN
4500 IF LEN(V1$) >2 OR LEN(V2$) >2 OR LEN(V1$) >4 THEN FL = 0: RETURN
4510 IF LEN(V1$) = 2 THEN 4525
4515 IF VAL(V1$) = 0 THEN V1$ = "??": GOTO 4525
4520 IF VAL(V1$) <10 THEN V1$ = "0" +V1$
4525 GOSUB 4530: RETURN
4530 IF LEN(V2$) = 2 THEN 4550
4535 IF VAL(V2$) = 0 THEN V2$ = "??": GOTO 4550
4540 IF VAL(V2$) <10 THEN V2$ = "0" +V2$
4550 IF LEN(V3$) = 4 THEN RETURN
4560 IF LEN(V3$) = 2 AND VAL(V3$) >0 THEN V3$ = LEFT$(Q$(6),2) +V3$: RETURN
4570 FOR I = 1 TO 4 - LEN(V3$):V3$ = "?" +V3$: NEXT : RETURN
4600 IF LEN(V1$) >2 OR LEN(V3$) >4 THEN FL = 0: RETURN
4700 IF ( LEN(V2$) >2 AND ( LEN(V2$) >3 OR RIGHT$(V2$,1) < >",")) OR LEN(V3$) >4 OR LEN(V3$) <2 THEN FL = 0: RETURN
4702 I = ASC(V3$): IF I <48 OR I >57 THEN IF I < >63 THEN FL = 0: RETURN
4705 IF RIGHT$(V2$,1) = "," THEN V2$ = LEFT$(V2$,2)
4710 J = 3: IF LEN(V1$) <3 THEN J = LEN(V1$)
4715 A$ = "": FOR I = 1 TO J:B$ = MID$ (V1$,I,1): IF ASC(B$) >95 AND I = 1 THEN B$ = CHR$( ASC(B$) -32)
4717 IF I >1 AND ASC(B$) <96 THEN B$ = CHR$( ASC(B$) +32)
4720 A$ = A$ +B$: NEXT :L = 0: FOR I = 1 TO 12: IF LEFT$(A$,J) = LEFT$(MT$(I),J) THEN L = I:I = 12
4730 NEXT : IF L = 0 THEN V1$ = "??"
4740 IF L >0 THEN V1$ = STR$(L): IF L <10 THEN V1$ = "0" +V1$
4750 GOSUB 4530: RETURN
4800 X = Y: GOSUB 7620:S$(0,1) = STR$(MG):S$(1,0) = STR$(CN): FOR I = 1 TO MG:S$(0,I +1) = MI$(1,I): NEXT : FOR I = 1 TO CN:S$(I +1,0) = C$(I): NEXT :X3 = 0
4810 X3 = X3 +1: IF X3 > VAL(S$(0,1)) THEN 4850
4815 A$ = S$(0,X3 +1): GOSUB 5500: IF NOT LA OR LC THEN 4810
4820 GOSUB 4950: IF YN$ = CZ$ THEN RETURN
4830 GOTO 4810
4850 X4 = 0
4860 X4 = X4 +1: IF X4 > VAL(S$(1,0)) THEN RETURN
4865 A$ = S$(X4 +1,0): GOSUB 5500: IF NOT LA OR LC THEN 4860
7100 POKE 34,0: GOSUB 850: FOR I = 1 TO 7: PRINT : NEXT : INVERSE : PRINT "PLEASE WAIT";: NORMAL : PRINT "...": PRINT : PRINT TAB( 14);: RETURN
7220 X2 = 0
7230 X2 = X2 +1: IF X2 >Q(19) THEN RETURN
7240 X = VAL(S$(1,X2)): IF X = 0 THEN 7230
7260 GOSUB 7620: IF MG < VAL(S$(0,X2)) THEN MG = VAL(S$(0,X2)):IX = MG:LA = 8: GOSUB 5800: GOTO 7320
7280 IX = 0: FOR X3 = 1 TO MG: IF Y = VAL(MI$(1,X3)) THEN IX = X3:X3 = MG
7300 NEXT : IF IX = 0 THEN IX = VAL(S$(0,X2)): IF IX = 0 THEN 7230
7320 MI$(1,IX) = STR$(Y): FOR X3 = 2 TO 3: IF S$(X3,X2) < >"" THEN IF MI$(X3,IX) = "" OR (MI$(X3,IX) < >"" AND OP(3)) THEN MI$(X3,IX) = S$(X3,X2)
7340 NEXT :A$ = LEFT$(MI$(4,IX),1):B$ = S$(4,X2): IF LEN(B$) >1 AND A$ = "" THEN MI$(4,IX) = "?": GOTO 7390
7350 IF LEN(B$) >1 OR ( LEN(B$) = 0 AND A$ < >"") THEN 7390
7360 IF B$ = "" AND A$ = "" THEN MI$(4,IX) = "M"
7370 IF B$ = "M" OR B$ = "E" OR B$ = "D" THEN IF A$ = "" OR (A$ < >"" AND OP(3)) THEN MI$(4,IX) = B$
7380 IF B$ = "W" THEN IF A$ = "" OR (A$ < >"" AND OP(3)) THEN MI$(4,IX) = "M"
7390 GOSUB 8100: GOTO 7230
7400 X2 = 0:X3 = 0: IF G(9) THEN X = Y: GOSUB 7620: IF RC$(G(9)) < >"" THEN X3 = ( LEFT$(RC$(G(9)),1) = "M"): GOTO 7430
7410 W = Y: GOSUB 420
7420 IF N3$ = "" THEN GOSUB 850: PRINT : PRINT "IS "N1$" "N2$" "N4$" MALE?";: GOSUB 690:X3 = NOT (YN$ = "N")
7430 X2 = X2 +1: IF X2 >OD THEN RETURN
7440 X = OD(X2): IF X = 0 THEN 7430
7450 GOSUB 7620
7460 X6 = 6:X7 = 7: IF X3 THEN X6 = 7:X7 = 6
7470 IF RC$(X6) = "" OR (RC$(X6) < >"" AND OP(3)) THEN RC$(X6) = STR$(Y)
7480 IF OP(4) THEN IF OE(X2) >0 THEN IF RC$(X7) = "" OR (RC$(X7) < >"" AND OP(3)) THEN RC$(X7) = STR$(OE(X2))
7490 GOSUB 8100: GOTO 7430
7620 W = X: GOSUB 2500: IF FF < >BB THEN GOSUB 8660
7625 FOR I = 1 TO Q(19): FOR J = 1 TO 4:MI$(J,I) = "": NEXT : NEXT : FOR I = 1 TO Q(18):C$(I) = "": NEXT
7630 FOR I = 1 TO Q(17):EX$(I) = "": NEXT : ONERR GOTO 8000
7635 IF FF = 0 THEN GOSUB 2896:ZF$ = PF$ +"FAMILY." + STR$(WH(BB,4)): PRINT CHR$(4)"OPEN"ZF$",L"Q(16)",S"WH(BB,2)",D"WH(BB,3):FF = BB
7640 PRINT CHR$(4)"READ"ZF$",R"X -WH(BB,0)
7660 II = 1: CALL LI:RC$(1) = MID$ (T$,1): IF RC$(1) < >"" THEN IF ASC(RC$(1)) = 34 THEN II = 2:RC$(1) = MID$ (RC$(1),2)
7680 FOR I = 2 TO 10: CALL LI:RC$(I) = MID$ (T$,II): NEXT
7700 A$ = RC$(8): GOSUB 5700:MG = A: IF MG >0 THEN FOR I = 1 TO MG: FOR J = 1 TO 4: CALL LI:MI$(J,I) = MID$ (T$,II): NEXT : NEXT
7740 A$ = RC$(9): GOSUB 5700:CN = A: IF CN >0 THEN FOR I = 1 TO CN: CALL LI:C$(I) = MID$ (T$,II): NEXT
7770 A$ = RC$(10): GOSUB 5700:NT = A: IF NT >0 THEN FOR I = 1 TO NT: CALL LI:EX$(I) = MID$ (T$,II): NEXT
7775 FOR I = 11 TO 20: CALL LI:RC$(I) = MID$ (T$,II): NEXT
7780 PRINT CHR$(4): POKE 216,0: RETURN
7840 Z = 0:A = LEN(AA$) - LEN(BB$): IF A <0 THEN RETURN
7880 I = A +1
7900 IF BB$ = MID$ (AA$,I, LEN(BB$)) THEN Z = I
7920 I = I -1: IF I >0 THEN 7900
7940 RETURN
8000 A = PEEK(222): POKE 216,0: IF A < >254 AND A < >5 THEN 16550
8005 PRINT "ERROR WHILE READING RECORD "X;: GOSUB 690: IF YN$ = CZ$ THEN 20000
8010 ONERR GOTO 8000
8020 RESUME
8100 IF Q(26) THEN RC$(11) = DZ$
8110 GOSUB 7100: PRINT "SAVING RECORD FOR "RN$"="X: GOSUB 8440: IF NOT JR THEN 8180
8120 W = X: GOSUB 420: GOSUB 850: PRINT "THE RECORD FOR "N1$" "N2$" "N3$" "N4$: PRINT "WOULD BE "A -Q(16)" CHARACTERS LONGER THAN THE";: GOSUB 860: PRINT "MAX RECORD LENGTH AND WON'T BE CHANGED"
8140 IF Y = X THEN PRINT "REENTER DATA?";: GOSUB 690: IF YN$ = "N" THEN JR = 0
8160 RETURN
8180 W = X: GOSUB 2500: IF FF < >BB THEN GOSUB 8660
8200 ONERR GOTO 16720
8220 IF FF = 0 THEN GOSUB 2896:ZF$ = PF$ +"FAMILY." + STR$(WH(BB,4)): PRINT CHR$(4)"OPEN"ZF$",L"Q(16)",S"WH(BB,2)",D"WH(BB,3):FF = BB
8230 PRINT CHR$(4)"WRITE"ZF$",R"X -WH(BB,0)
8240 FOR I = 1 TO 10: PRINT RC$(I): NEXT
8260 IF MG >0 THEN FOR I = 1 TO MG: FOR J = 1 TO 4: PRINT MI$(J,I): NEXT : NEXT
8300 IF CN >0 THEN FOR I = 1 TO CN: PRINT C$(I): NEXT
8330 IF NT >0 THEN FOR I = 1 TO NT: PRINT EX$(I): NEXT
8337 FOR I = 11 TO 20: PRINT RC$(I): NEXT
8340 PRINT CHR$(4): POKE 216,0: RETURN
8440 JR = 0:A = 0: FOR I = 1 TO 20:A = A + LEN(RC$(I)): NEXT
8460 IF MG >0 THEN FOR I = 1 TO MG: FOR J = 1 TO 4:A = A + LEN(MI$(J,I)): NEXT : NEXT
8500 IF CN >0 THEN FOR I = 1 TO CN:A = A + LEN(C$(I)): NEXT
8530 IF NT >0 THEN FOR I = 1 TO NT:A = A + LEN(EX$(I)): NEXT
8540 A = A +20 +4 *MG +CN +NT
8550 IF A >Q(16) THEN JR = 1
8560 RETURN
8600 IF KY <0 THEN PRINT "NO FUNCTION KEYS ALLOCATED";: FOR I = 1 TO 3000: NEXT : RETURN
8605 POKE 34,0: GOSUB 850: PRINT "SET FUNCTION KEY BY USING THE KEY:": PRINT
8610 FOR I = 0 TO KY: PRINT "CTRL-" CHR$(KY(I) +64)": "KY$(I): NEXT : PRINT
8620 INVERSE : PRINT "WHICH?";: GOSUB 690: IF YN$ = CHR$(13) THEN RETURN
8630 J = -1: FOR I = 0 TO KY: IF ASC(YN$) = KY(I) THEN J = I
8635 NEXT : IF J <0 THEN 8620
8640 PRINT : PRINT "VALUE FOR CTRL-" CHR$(KY(J) +64);: GOSUB 300: IF A$ = "" THEN 8600
8645 KY$(J) = A$: GOTO 8600
8650 FS = 0: IF ZN$ < >"" THEN PRINT CHR$(4)"CLOSE"ZN$
8655 RETURN
8660 FF = 0: IF ZF$ < >"" THEN PRINT CHR$(4)"CLOSE"ZF$
8665 RETURN
9000 DATA 5
9020 DATA EDIT RECORDS,EDIT NAMES,SET FUNCTION KEYS,CHANGE PROGRAM PARAMETERS,EXIT PROGRAM
9040 DATA 4
9060 DATA NUMBER RANGE,NUMBER LIST,NAME SET,LIST IN MEMORY
9080 DATA 4
9090 DATA LAST NAME AT BIRTH,FIRST NAME(S),MARRIED LAST NAME,"TITLE"
9100 DATA 10
9120 DATA BORN ON,BORN AT,DEATH DATE OR 'LIVING',DIED/LIVING AT,,MOTHER,FATHER,NUMBER OF MARRIAGES,NUMBER OF CHILDREN,"NUMBER OF NOTES"
9200 DATA 4
9210 DATA SPOUSE #,MARRIED ON,MARRIED AT,"MARITAL STATUS"
9300 DATA 15,SHOW SIZE AFTER EACH INPUT,DO COMPLEMENTING,UNCONDITIONAL SUBSTITUTION,ENTER SPOUSE'S CHILDREN,COMPLEMENT ADDRESS,ADD NAMES SEQUENTIALLY
9305 DATA NEXT NAME ,STEP START NUMBER,SAVE LAST ON EXIT,COMPLEMENT CHILD WITH NO ,DON'T REDISPLAY SCREEN,ADD NAMES IN BATCHES,ECHO CURRENT ENTRY,ECHO FUNCTION KEY ENTRIES,ALLOW CTRL'S IN DATA
9660 PRINT "A) ADD NAMES": PRINT "B) CHANGE A NAME": PRINT "C) REINITIALIZE A RECORD": PRINT "D) STORE NAMES ON DISK"
9670 PRINT : INVERSE : PRINT "CHOICE (A-D/P/K)?";: GOSUB 690: IF ASC(YN$) = 13 THEN RETURN
9672 IF YN$ = "K" THEN GOSUB 8600: GOTO 9540
9675 IF YN$ = "P" THEN GOSUB 1600: GOTO 9540
9676 IF YN$ < >CZ$ THEN 9680
9677 PRINT "NO NAMES WILL BE SAVED.": PRINT : INVERSE : PRINT "ARE YOU SURE?";: GOSUB 690: IF YN$ = "Y" THEN CZ = 1: RETURN
9678 GOTO 9540
9680 C = ASC(YN$) -64: IF C <1 OR C >4 THEN 9670
9710 ON C GOSUB 9760,10000,10850,9720: GOTO 9540
9720 I = 0: FOR AA = 0 TO Q(37) -1:I = I +PT(AA): NEXT : IF I = 0 THEN RETURN
9722 IF CZ THEN CZ = 0: FOR AA = 0 TO Q(37) -1:PT(AA) = 0:CT(AA) = 0: RETURN
9725 GOSUB 7100: PRINT "SAVING NAMES": FOR AA = 0 TO Q(37) -1: GOSUB 10470: NEXT : RETURN
9760 GOSUB 850: IF OP(6) THEN 9790
9765 PRINT : PRINT "FOR WHICH "RN$" DO YOU WANT TO ADD A NAME";: INPUT "? ";YN$:X = VAL(YN$): IF X = 0 THEN RETURN
9767 U = X: GOSUB 500: IF NOT U THEN 9765
9770 W = X: GOSUB 420: GOSUB 9400: IF N1$ +N2$ +N3$ +N4$ = "" THEN 9820
9775 PRINT "THAT IS THE "RN$" FOR": PRINT N1$" "N2$" "N3$" "N4$: PRINT "SELECT 'CHANGE A NAME' ON THE MENU TO": PRINT "CHANGE IT.": IF OP(12) THEN 9765
9780 FOR I = 1 TO 5000: NEXT : RETURN
9790 X = OP(7):OP(7) = OP(7) +1:C4 = 1: IF OP(7) >30 THEN OP(7) = 30: PRINT "NO MORE "RN$"'S AVAILABLE. RESET ITEM G";: GOSUB 860: PRINT "ON THE MENU OF PARAMETERS.";: GOSUB 690: RETURN
9795 W = X: GOSUB 420: GOSUB 9400: IF N1$ +N2$ +N3$ +N4$ = "" THEN 9820
9800 PRINT RN$"="X" WAS ALREADY USED.": IF PEEK( -16384) <128 THEN 9790
9805 POKE -16368,0: RETURN
9820 PRINT : PRINT "PRESS 'RETURN' BELOW WHERE YOU DON'T";: GOSUB 860: PRINT "HAVE A NAME OR THERE IS NO NAME": PRINT : PRINT "(ADDING "RN$"="X")"
9825 CH$ = " ENTER NAME":D$ = "":N1$ = "":N2$ = "":N3$ = "":N4$ = "": GOSUB 10140: IF N1$ +N2$ +N3$ +N4$ = "" OR CZ = 1 THEN OP(7) = OP(7) -1: RETURN
9830 GOSUB 10810:PT(AA) = 1: IF OP(12) THEN 9760
9840 RETURN
10000 PRINT "PERSON'S "RN$;: INPUT " # ";YN$: IF YN$ = "" THEN RETURN
10010 X = VAL(YN$):U = X: GOSUB 500: IF NOT U THEN 10000
10020 W = X: GOSUB 420: GOSUB 9400:X5 = 0:IX = 0: GOSUB 639: PRINT "IS THIS THE CORRECT ONE TO CHANGE? ";: GOSUB 690: IF YN$ < >"Y" THEN 10000
10070 GOSUB 850: PRINT "PRESS 'RETURN' BELOW WHERE YOU DON'T";: GOSUB 860: PRINT "WANT ANY CHANGES": PRINT : PRINT "CHANGING ";:IX = 9:X5 = 0: GOSUB 636
10170 PRINT CH$(2): PRINT CH$N1$D$;: GOSUB 300: GOSUB 9420: IF A$ < >"" THEN N1$ = A$
10180 IF A$ = B$ THEN N1$ = ""
10200 PRINT CH$(3): PRINT CH$N3$D$;: GOSUB 300: GOSUB 9420: IF A$ < >"" THEN N3$ = A$
10210 IF A$ = B$ THEN N3$ = ""
10230 PRINT CH$(4): PRINT CH$N4$D$;: GOSUB 300: GOSUB 9420: IF A$ < >"" THEN N4$ = A$
10240 IF A$ = B$ THEN N4$ = ""
10260 RETURN
10470 X1 = 0: IF PT(AA) = 0 THEN RETURN
10472 R = LEN( STR$(PA(AA))): FOR I = Q(36) *AA +1 TO Q(36) *(AA +1):R = R + LEN(NA$(I)): NEXT :R = R +Q(36) +2:R = R + LEN( STR$(R)):A = Q(36) *Q(14) +Q(38): IF A > = R THEN 10474
10473 PRINT "THERE ARE "R -A" CHARACTERS TOO MANY FOR";: GOSUB 860: PRINT "NAMES WITH "RN$"'S FROM "PA(AA) +1" TO "PA(AA) +Q(36)".": PRINT "PLEASE SEE MANUAL.";: GOSUB 690:X1 = 1: GOTO 10490
10474 X9 = W:W = PA(AA) +1: GOSUB 2500:W = X9: IF FS < >BB THEN GOSUB 8650
10475 ONERR GOTO 16720
10476 IF FS = 0 THEN GOSUB 2896:ZN$ = PF$ +"NAMELIST." + STR$(WH(BB,4)): PRINT CHR$(4)"OPEN"ZN$",S"WH(BB,2)",D"WH(BB,3)",L"Q(36) *Q(14) +Q(38)
10477 R = INT((PA(AA) -WH(BB,0))/Q(36)) +1: PRINT CHR$(4)"WRITE"ZN$",R"R: PRINT PA(AA) -WH(BB,0): PRINT R
10480 FOR I = Q(36) *AA +1 TO Q(36) *(AA +1): PRINT NA$(I): NEXT : PRINT CHR$(4):SC(AA) = 0
10490 PT(AA) = 0: POKE 216,0: RETURN
10550 MG = 0:CN = 0:NT = 0: FOR I = 1 TO 20:RC$(I) = "": NEXT : GOSUB 8180
10560 RETURN
10810 BB = X -PA(AA) +Q(36) *AA: IF N3$ = "" THEN NA$(BB) = N2$ +Q$(5) +N1$ +Q$(5) +N4$: RETURN
10850 PRINT "PERSON'S "RN$;: INPUT " # ";YN$: IF YN$ = "" THEN RETURN
10860 X = VAL(YN$):U = X: GOSUB 500: IF NOT U THEN 10850
10870 W = X: GOSUB 420: GOSUB 9400:X5 = 0:IX = 0: GOSUB 639: PRINT "IS THIS THE CORRECT ONE TO REINIT? ";: GOSUB 690: IF YN$ < >"Y" THEN 10850
10900 IF LEFT$(YN$,1) < >"Y" THEN 10850
10910 GOSUB 850: PRINT "PRESS 'RETURN' BELOW WHERE YOU DON'T";: GOSUB 860: PRINT "HAVE A NAME OR THERE IS NO NAME.": PRINT : PRINT "(REINITIALIZING "RN$"="W")"
16010 A$ = DY$: GOSUB 4200:DZ$ = A$: FOR I = 0 TO Q(37) -1:PT(I) = 0: NEXT :C2 = 0:C4 = 0
16015 READ OB: FOR I = 1 TO OB: READ H$(I): NEXT
16020 READ OB: FOR I = 1 TO OB: READ H1$(I): NEXT
16025 READ OB: FOR I = 1 TO OB: READ CH$(I): NEXT
16030 READ OB: FOR I = 1 TO OB: READ VR$(I): NEXT
16035 READ OB: FOR I = 1 TO OB: READ WR$(I): NEXT
16040 READ OP: FOR I = 1 TO OP: READ OP$(I): NEXT : FOR I = 1 TO OP: READ TY(I): NEXT :OP$(7) = OP$(7) +RN$:OP$(10) = OP$(10) +RN$:OP$(9) = LEFT$(OP$(9),10) +RN$ + MID$ (OP$(9),10)
16090 POKE 34,0: POKE 216,0: GOSUB 9720:FF = 0:FS = 0: PRINT CHR$(4)"CLOSE": GOSUB 850: HTAB (Q(22) -30)/2: INVERSE : PRINT "EDIT-NAMES-AND-RECORDS PROGRAM": NORMAL : PRINT : PRINT "WHICH DO YOU WANT TO DO:" SPC( 5)DY$
16100 FOR X = 0 TO Q(37) -1:SC(X) = 0: NEXT : PRINT : FOR X = 1 TO 5: PRINT CHR$(X +64)") "H$(X): NEXT : PRINT
16110 INVERSE : PRINT "CHOICE (A-F)?";: GOSUB 690: IF ASC(YN$) = 13 THEN 6760
16120 IF YN$ = "P" THEN YN$ = "D"
16130 IF YN$ = "K" THEN YN$ = "C"
16140 PRINT :C1 = ASC(YN$) -64: IF C1 <1 OR C1 >5 THEN 16110
16150 IF C1 = 5 THEN 6760
16170 ON C1 GOSUB 16180,9540,8600,1600: GOTO 16090
16180 PRINT H$(C1)" BY:": PRINT
16190 L = 3: IF LO >0 THEN L = 4
16200 FOR X = 1 TO L: PRINT CHR$(X +64)") "H1$(X): NEXT : PRINT
16210 INVERSE : PRINT "CHOICE (A-" CHR$(L +64)"/P/K/M)?";: GOSUB 690: IF ASC(YN$) = 13 THEN RETURN
16215 IF YN$ = "M" THEN GOSUB 840: GOTO 16180
16220 IF YN$ = "P" THEN GOSUB 1600: GOSUB 850: GOTO 16180
16230 IF YN$ = "K" THEN GOSUB 8600: GOSUB 850: GOTO 16180
16240 C3 = ASC(YN$) -64: IF C3 <1 OR C3 >L THEN 16210
16250 PRINT : ON C3 GOSUB 1000,740,1260,770: RETURN
16500 ONERR GOTO 16540
16510 PRINT CHR$(4)"OPENCONFIGURATION": PRINT CHR$(4)"READCONFIGURATION": FOR I = 1 TO 84: INPUT A: NEXT
16520 FOR I = 1 TO 50: CALL LI: NEXT
16530 FOR I = 1 TO 14: INPUT OP(I): NEXT : FOR I = 1 TO 112: INPUT OP(15): NEXT : PRINT CHR$(4)"CLOSE": POKE 216,0: GOSUB 16560: RETURN
16540 A = PEEK(222): IF A = 5 OR A = 6 OR A = 8 THEN PRINT "NO CONFIGURATION FILE AVAILABLE ON DISK";: GOSUB 860: PRINT "LAST USED. PLEASE SEE MANUAL.": END
16550 PRINT "ERROR # "A" IN LINE " PEEK(218) +256 * PEEK(219)". PLEASE SEE";: GOSUB 860: PRINT "DOS MANUAL.";: GOSUB 690: GOTO 19000